package com.ideawedo.tools;
import java.sql.Connection;
import java.sql.SQLException;

import com.jolbox.bonecp.BoneCP;
import com.jolbox.bonecp.BoneCPConfig;

/**
 * DBCP配置类
 * @author SUN
 */
public class DBPool {
	private BoneCPConfig cpConfig;
    private BoneCP dataSource;
    
    //加载DBCP配置文件
    {
    	cpConfig = new BoneCPConfig();
    	// 相应驱动的jdbcUrl
    	cpConfig.setJdbcUrl(MHConfig.url);
        // 数据库的用户名
    	cpConfig.setUsername(MHConfig.uname);
        // 数据库的密码
    	cpConfig.setPassword(MHConfig.password);

    	//设置分区个数.这个参数默认为1,建议3-4（根据特定应用程序而定）
    	cpConfig.setPartitionCount(MHConfig.partition_count);
        // 检查数据库连接池中空闲连接的间隔时间，单位是分，默认值：240，如果要取消则设置为0
    	cpConfig.setIdleConnectionTestPeriodInMinutes(MHConfig.idle_connection_test_period_in_minutes);
        // 连接池中未使用的链接最大存活时间，单位是分，默认值：60，如果要永远存活设置为0
    	cpConfig.setIdleMaxAgeInMinutes(MHConfig.idle_max_age_in_minutes);
        // 每个分区最大的连接数
    	cpConfig.setMaxConnectionsPerPartition(MHConfig.max_connections_per_partition);
        // 每个分区最小的连接数    
    	cpConfig.setMinConnectionsPerPartition(MHConfig.min_connections_per_partition);
    	//设置分区中的连接增长数量.这个参数默认为1
    	cpConfig.setAcquireIncrement(MHConfig.acquire_increment);
    	
    	try {
			dataSource = new BoneCP(cpConfig);
		} catch (SQLException e) {
			e.printStackTrace();
		}
    }
    
    //从连接池中获取一个连接
    public Connection getConnection(){
        Connection connection = null;
        try{
            connection = dataSource.getConnection();
        }catch(SQLException e){
            e.printStackTrace();
        }
        try {
            connection.setAutoCommit(false);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }
    
    public static void main(String[] args) {
        new DBPool().getConnection();
    }
}